home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Moscow ML 1.31 / source code / mosml / src / mosmllib / Mosml.sml < prev    next >
Encoding:
Text File  |  1996-07-03  |  1.1 KB  |  46 lines  |  [TEXT/R*ch]

  1. (* Mosml -- Moscow ML specific functions *)
  2.  
  3. local 
  4.     prim_val argv_   : string Vector.vector = 0 "command_line";
  5. in
  6.  
  7. fun argv () = 
  8.     let fun h i res = 
  9.     if i >= 0 then h (i-1) (Vector.sub(argv_, i) :: res)
  10.     else res
  11.     in h (Vector.length argv_ - 1) [] end;
  12.  
  13. (* Requires Time and Timer to be loaded *)
  14.  
  15. fun time f arg =
  16.     let open Timer
  17.     val cputimer  = startCPUTimer ()
  18.     val realtimer = startRealTimer ()
  19.     fun report () = 
  20.         let val {usr, sys, gc} = checkCPUTimer cputimer;
  21.         val rea = checkRealTimer realtimer;
  22.         fun format t = Time.toString t
  23.         open BasicIO
  24.         in say("User: "     ^ format usr ^
  25.            "  System: " ^ format sys ^ 
  26.            "  GC: "     ^ format gc  ^ 
  27.            "  Real: "   ^ format rea ^ "\n")
  28.         end
  29.     fun x before y = x
  30.     in
  31.     (f arg before report ())
  32.     handle e => (report (); raise e)
  33.     end;
  34.  
  35. fun listDir path =
  36.     let open FileSys
  37.     val dir = openDir path
  38.     fun read "" res = res
  39.       | read f  res = read (readDir dir) (f :: res)
  40.     val files = read (readDir dir) []
  41.     in closeDir dir; files end
  42.     handle exn as OS.SysErr (msg, _) => (BasicIO.say msg; raise exn)
  43.  
  44. end (* local *)
  45.  
  46.